home *** CD-ROM | disk | FTP | other *** search
- static void near error_return(void)
- {
- longjmp(error::current->jmpbuf, 1);
- }
-
- void declare_error(void)
- {
- _AX = (int) error_return;
- asm MOV BP,[BP]; // move frame pointer up one level
- asm MOV [BP+2],AX; // patch return address
- #if defined(__MEDIUM__) || defined(__LARGE__) || defined(__HUGE__)
- asm MOV [BP+4],CS; // if return address is far, patch segment, too
- #endif
- }
-
- error error_x;
- if (setjmp(error_x.jmpbuf))
- {
- <garbage collection>
- declare_error();
- return;
- }
-
-